package GUI;

import java.awt.BorderLayout;

import javax.swing.DefaultCellEditor;
import javax.swing.JCheckBox;
import javax.swing.JDialog;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import java.awt.Cursor;
import javax.swing.JButton;
import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JLabel;
import javax.swing.table.DefaultTableModel;
import modelo.gestionReserva.Mesa;
import modelo.gestionReserva.Reserva;
import aplicaciones.Main;

public class SeleccionManualMess extends JDialog {

	private static final long serialVersionUID = 1L;

	private JPanel jContentPane = null;

	private JScrollPane tablaMesas = null;

	private JTable jTable = null;

	private JButton Aceptar = null;

	private JButton Cancelar = null;

	private JLabel plazaAOcupar = null;

	private JLabel plazasAsignadas = null;


	private JScrollPane TablaMesas = null;

	private JTable TablillaMesas = null;
	
	private JCheckBox incluir;
	
	Reserva r = null;
	
	int ocupados;
	
	JDialog ventana;

	/**
	 * This is the default constructor
	 */
	public SeleccionManualMess(Reserva unaReserva) {
		super();
		ocupados = 0;
		r = unaReserva;
		initialize();
		ventana = this;
		
	}

	/**
	 * This method initializes this
	 * 
	 * @return void
	 */
	private void initialize() {
		this.setSize(300, 304);
		this.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
		//this.setIconImage(null);
		this.setContentPane(getJContentPane());
		this.setTitle("Selección Manual Mesas");
	}

	/**
	 * This method initializes jContentPane
	 * 
	 * @return javax.swing.JPanel
	 */
	private JPanel getJContentPane() {
		if (jContentPane == null) {
			plazasAsignadas = new JLabel();
			plazasAsignadas.setBounds(new Rectangle(11, 218, 200, 16));
			plazasAsignadas.setText("Plazas Asignadas");
			plazaAOcupar = new JLabel();
			plazaAOcupar.setBounds(new Rectangle(11, 196, 200, 16));
			plazaAOcupar.setText("Plazas a Ocupar");
			jContentPane = new JPanel();
			jContentPane.setLayout(null);
			jContentPane.add(getTablaMesas(), BorderLayout.CENTER);
			jContentPane.add(getAceptar(), null);
			jContentPane.add(getCancelar(), null);
			jContentPane.add(plazaAOcupar, null);
			jContentPane.add(plazasAsignadas, null);
			jContentPane.add(getTablaMesas2(), null);
			plazaAOcupar.setText("Plazas a ocupar:  "+r.getComensales());
			plazasAsignadas.setText("Plazas ya asignadas: "+ocupados);
			//jContentPane.add(jcb, null);
		}
		return jContentPane;
	}

	/**
	 * This method initializes tablaMesas	
	 * 	
	 * @return javax.swing.JScrollPane	
	 */
	private JScrollPane getTablaMesas() {
		if (tablaMesas == null) {
			tablaMesas = new JScrollPane();
			tablaMesas.setViewportView(getJTable());
		}
		return tablaMesas;
	}

	/**
	 * This method initializes jTable	
	 * 	
	 * @return javax.swing.JTable	
	 */
	private JTable getJTable() {
		if (jTable == null) {
			jTable = new JTable();
			jTable.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
		}
		return jTable;
	}

	/**
	 * This method initializes Aceptar	
	 * 	
	 * @return javax.swing.JButton	
	 */
	private JButton getAceptar() {
		if (Aceptar == null) {
			Aceptar = new JButton("Aceptar");
			Aceptar.setBounds(new Rectangle(200, 244, 94, 29));
			
			Aceptar.addActionListener(new ActionListener(){

				public void actionPerformed(ActionEvent arg0) {
					
					boolean titular = false;
					boolean seguir = true;
					int num_mesa = 0;
					Mesa mesa = null;
					
					r.eliminarMesas();
					
					//buscamos las mesas seleccionadas
					
					for (int i = 0; i < TablillaMesas.getRowCount(); ++i){
						
						seguir = true;
						num_mesa = Integer.parseInt( TablillaMesas.getValueAt(i, 1).toString() );
						
						System.out.println("El numero paece que lo hace bien " + num_mesa);
						System.out.println("EL booleano es " + TablillaMesas.getValueAt(i, 0).toString());
						
						if ( Boolean.parseBoolean( TablillaMesas.getValueAt(i, 0).toString()) ){
							
							
							// buscamos la mesa entre las mesas del restuarante
							for (int j=0; j<Main.m_Restaurante.getMesas().size() && seguir; ++j){
								if (Main.m_Restaurante.getMesas().get(j).getNumMesa() == num_mesa){
									seguir = false;
									mesa = Main.m_Restaurante.getMesas().get(j);
								}
							}
							
							
							// agregamos la mesa a la reserva
							if (!titular){
								r.setMesaTitular(mesa, true);
								titular = true;
							}
							else{
								r.setMesa(mesa, true);
							}
						}
					}
					
					ventana.dispose();
				}
				
			});
		}
		return Aceptar;
	}

	/**
	 * This method initializes Cancelar	
	 * 	
	 * @return javax.swing.JButton	
	 */
	private JButton getCancelar() {
		if (Cancelar == null) {
			Cancelar = new JButton("Cancelar");
			Cancelar.setBounds(new Rectangle(96, 244, 94, 29));
			
			Cancelar.addActionListener(new ActionListener(){

				public void actionPerformed(ActionEvent arg0) {
					ventana.dispose();
				}
				
			});
		}
		return Cancelar;
	}

	/**
	 * This method initializes TablaMesas	
	 * 	
	 * @return javax.swing.JScrollPane	
	 */
	private JScrollPane getTablaMesas2() {
		if (TablaMesas == null) {
			TablaMesas = new JScrollPane();
			TablaMesas.setBounds(new Rectangle(24, 18, 235, 161));
			TablaMesas.setViewportView(getTablillaMesas());
		}
		return TablaMesas;
	}

	/**
	 * This method initializes TablillaMesas	
	 * 	
	 * @return javax.swing.JTable	
	 */
	private JTable getTablillaMesas() {
		if (TablillaMesas == null) {
			TablillaMesas = new JTable();
			
			DefaultTableModel modelo = new DefaultTableModel();
			
			modelo.addColumn("Agregar");
			modelo.addColumn("Mesa");
			modelo.addColumn("Capacidad");
			
			modelo.setRowCount(Main.m_Restaurante.getMesas().size());
			
			for (int i=0; i<Main.m_Restaurante.getMesas().size(); i++){
				modelo.setValueAt("false", i, 0);
				modelo.setValueAt(Main.m_Restaurante.getMesas().get(i).getNumMesa(), i, 1);
				modelo.setValueAt(Main.m_Restaurante.getMesas().get(i).getCapacidadMax(), i, 2);
			}
			
			incluir = new JCheckBox("Seleccionada", true);
			
			
			incluir.addActionListener(new ActionListener(){

				public void actionPerformed(ActionEvent arg0) {
					
					
					int fila = TablillaMesas.getSelectedRow();
					int plazas = Integer.parseInt(TablillaMesas.getValueAt(fila, 2).toString());
					
					// TODO Auto-generated method stub
					if (incluir.isSelected()){
						
						ocupados += plazas;
					}else{
						ocupados-= plazas;
					}
						
					plazaAOcupar.setText("Plazas a ocupar:  "+r.getComensales());
					plazasAsignadas.setText("Plazas ya asignadas: "+ocupados);
					
				}
				
			});		
			TablillaMesas.setModel(modelo);
			
			TablillaMesas.getColumn("Agregar").setCellEditor(new DefaultCellEditor(incluir));
		}
		return TablillaMesas;
	}

}  //  @jve:decl-index=0:visual-constraint="10,10"

